package com.upc.cajabancos.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import oracle.jdbc.driver.OracleResultSet;
import oracle.jdbc.driver.OracleTypes;

import com.upc.cajabancos.model.Cliente;
import com.upc.cajabancos.model.OrdenPago;
import com.upc.cajabancos.util.DataAccessObjetc;

public class OrdenPagoDAO {
	
	private Connection connection = null;
	
	public OrdenPagoDAO(Connection connection){
		this.connection = connection;
	}
	
	public void actualizar(OrdenPago ordenPago) throws Exception{
		
		CallableStatement cst= null;
		
		try{
			
			cst= connection.prepareCall(DataAccessObjetc.buildProcedureCall("ACTUALIZAR_ORDENPAGO",3));
			cst.setString(1, ordenPago.getCodigo());
			cst.setString(2, ordenPago.getEstado());
			cst.setDouble(3, ordenPago.getTotalPagar());
			
			cst.execute();
			
		}
		catch(Exception e){
			e.printStackTrace();
			throw e;
		}
		finally{
			
			DataAccessObjetc.close(null, cst, null);
		}
	}
	
	/**
	 * Busca las ordenes de pago de un cliente
	 * @author Cesar Jesus
	 * @since 30/01/2011
	 * @param idCliente
	 * @return List<OrdenPago>
	 */	
	public List<OrdenPago> buscar(String idCliente) throws Exception{
		CallableStatement cstmt = null;	
		ResultSet rs = null;
		OrdenPago ordenPago = null;
		List<OrdenPago> listaOrdenPago = new ArrayList<OrdenPago>();
    	
    	try{
			
			cstmt = connection.prepareCall(DataAccessObjetc.buildProcedureCall("LISTA_ORDENESPAGO",2));
			
			cstmt.setString(1, idCliente);
			cstmt.registerOutParameter(2, OracleTypes.CURSOR);
			cstmt.execute();
			rs = (OracleResultSet)cstmt.getObject(2);
			
			while (rs.next()){
				ordenPago = new OrdenPago();
				ordenPago.setCodigo(rs.getString("Co_OrdenPago"));
				ordenPago.setCliente(new Cliente(idCliente));
				ordenPago.getCliente().setNombre(rs.getString("No_Cliente"));
				ordenPago.setFechaEmision(rs.getDate("Fe_FechaEmision"));
				ordenPago.setTotalPagar(rs.getDouble("SS_TotalPagar"));
				ordenPago.setEstado(rs.getString("co_estado"));

				listaOrdenPago.add(ordenPago);
			}
			
    	}
    	catch(Exception e){
    		throw e;
    	}
    	finally {
    		DataAccessObjetc.close(null,cstmt,rs);
		}
    	
    	return listaOrdenPago;
    }

}
